<?php
/**
 * Created by PhpStorm.
 * User: HuangLuSen
 * Date: 2017/12/8
 * Time: 15:37
 */

namespace app\queue\jobs;

use app\admin\logic\Order;
use app\common\traits\Common;
use think\Db;
use think\queue\Job;
use think\Validate;
use think\Exception;
/**
 * Class Excel 队列消费类
 * @package app\job\controller
 * @author: Huang
 */
class Excel
{
    use Common;

    /**
     * fire方法是消息队列默认调用的方法
     * @param Job $job 当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        // 如有必要,可以根据业务需求和数据库中的最新数据,判断该任务是否仍有必要执行.
//        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
//        if (!$isJobStillNeedToBeDone) {
//            $job->delete();
//            return;
//        }
        $isJobDone = $this->doJob($data);
        if ($isJobDone) {
            $job->delete();
        } else {
            if ($job->attempts() > 3) {
                $job->delete();
            }
        }
    }

    /**
     * 有些消息在到达消费者时,可能已经不再需要执行了
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function checkDatabaseToSeeIfJobNeedToBeDone($data)
    {
        return true;
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    public static function doJob($data)
    {
        // 根据消息中的数据进行实际的业务处理...
        $order = new Order();

        $map = self::Verification($data);
        $map['cztime'] = time();
        $map['jdtime'] = time();
        $map['addtype'] = 3;
        $map['state'] = 1;
//        if (!empty($map['invitation_group']) && !empty($map['invitation'])) {
//            $map['distribution_time'] = time();
//            $map['state'] = 2;
//        }

        $re = $order->add($map, 12);
        if ($re['status'] != 1) {
            $map['errorinfo'] = $re['info'];
            if($map['name_z']!=''){
                Db::name('order_error')->insert($map);
            }
        }
        return true;
    }

    /**
     * @param Job $job
     * @param $data
     * @return bool
     * @author: Huang
     */
    public static function baopo(Job $job, $data)
    {
        // 根据消息中的数据进行实际的业务处理...
        $validate = new Validate([
            'name'  => 'require',
            'phone' => 'unique:baopohd'
        ]);
        if ($validate->check($data)) {
            Db::name('baopohd')->insert($data);
        }
        $job->delete();
    }

    /**
     * 微信发送日志
     * @param $data
     * @param $array
     * @return bool
     * @author: Huang
     */
    public static function Log($data, $array)
    {
        $re = $array;
        $wesmslog = new Wesmslog();
        $str = '';
        foreach ($data as $key => $v) {
            if (is_array($v)) {
                foreach ($v as $keys => $vo) {
                    $str .= $keys . ":" . $vo['value'] . ';';
                }
            } else {
                $str .= $key . ":" . $v . ';';
            }
        }
        $array['send_id'] = $data['send_id'];
        $array['receive_id'] = $data['receive_id'];
        $array['order_id'] = $data['order_id'];
        $array['send_msg'] = $str;
        $wesmslog->allowField(true)->save($array);
        return $re;
    }
}